package com.annotation;

import org.springframework.beans.factory.annotation.*;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.condition.*;
import org.springframework.boot.context.properties.*;
import org.springframework.boot.convert.*;
import org.springframework.cache.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.scheduling.annotation.*;
import org.springframework.stereotype.*;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * * {@link SpringBootApplication} 这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合
 * * {@link AutoConfigurationPackage}
 * * {@link AutoConfigureAfter}
 * * {@link AutoConfigureBefore}
 * * {@link AutoConfigureOrder}
 * * {@link EnableAutoConfiguration}
 * * {@link ImportAutoConfiguration}
 * *
 * *
 * * {@link Component}      通用组件模式注解
 * * {@link ComponentScan}  通用组件模式注解（包路径）
 * * {@link ComponentScans} 通用组件模式注解（包路径多个）
 * * {@link Service}        服务模式注解
 * * {@link Repository}     数据仓库模式注解
 * * {@link Controller}     Web控制器模式注解
 * * {@link Bean}           动态初始化对象
 * * {@link Indexed}        它可以为Spring的模式注解添加索引，以提升应用启动性能（不常用）
 * *
 * *
 * * {@link Autowired}
 * * {@link Configurable} 给非Spring容器管理的对象提供注入Spring容器内对象的一个注解
 * * {@link Lookup} 如果有一个类C,需要用到类B,如果使用@Autowired注解注入B,那么B每次调用都是同一个对象，即使B不是单例的
 * * {@link Qualifier}
 * * {@link Value}
 * * {@link Resource}
 * *
 * *
 * * {@link Configuration}  用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器
 * * {@link ConfigurationProperties}       读取配置信息,但不会自动注入
 * * {@link ConfigurationPropertiesScan}   读取配置信息,但不会自动注入
 * * {@link EnableConfigurationProperties} 让使用 @ConfigurationProperties 注解的类生效
 * * {@link ConfigurationPropertiesBinding}
 * * {@link ConstructorBinding}
 * * {@link DeprecatedConfigurationProperty}
 * * {@link NestedConfigurationProperty}
 * *
 * *
 * * {@link DependsOn}
 * * {@link Description}
 * * {@link EnableAspectJAutoProxy}
 * * {@link EnableLoadTimeWeaving}
 * * {@link EnableMBeanExport}
 * * {@link Import} 通过导入的方式实现把实例加入springIOC容器中
 * * {@link ImportResource} @Import类似,区别就是@ImportResource导入的是配置文件
 * * {@link Lazy} 延迟注入，一般用于解决循环依赖
 * * {@link Primary}
 * * {@link Profile}
 * * {@link PropertySource}
 * * {@link PropertySources}
 * * {@link Role}
 * * {@link Scope}
 * *
 * *
 * * 按照一定的条件进行判断,满足条件给容器注册bean
 * * {@link Conditional}
 * * {@link ConditionalOnBean}
 * * {@link ConditionalOnClass}
 * * {@link ConditionalOnCloudPlatform}
 * * {@link ConditionalOnExpression}
 * * {@link ConditionalOnJava}
 * * {@link ConditionalOnJndi}
 * * {@link ConditionalOnMissingBean}
 * * {@link ConditionalOnMissingClass}
 * * {@link ConditionalOnNotWebApplication}
 * * {@link ConditionalOnProperty}
 * * {@link ConditionalOnResource}
 * * {@link ConditionalOnSingleCandidate}
 * * {@link ConditionalOnWarDeployment}
 * * {@link ConditionalOnWebApplication}
 * *
 * *
 * * web相关
 * * {@link Mapping}
 * * {@link RequestMapping}
 * * {@link GetMapping}
 * * {@link PostMapping}
 * * {@link PutMapping}
 * * {@link PatchMapping}
 * * {@link DeleteMapping}
 * * {@link RequestAttribute}
 * * {@link RequestBody}
 * * {@link RequestHeader}
 * * {@link RequestParam}
 * * {@link PathVariable}
 * * {@link RequestPart}
 * * {@link ResponseBody}
 * * {@link ResponseStatus}
 * * {@link CookieValue}
 * * {@link SessionAttribute}
 * * {@link SessionAttributes}
 * * {@link MatrixVariable}
 * * {@link ModelAttribute}
 * * {@link CrossOrigin}
 * * {@link InitBinder}
 * * {@link ExceptionHandler}
 * * {@link ControllerAdvice}
 * * {@link RestController}
 * * {@link RestControllerAdvice}
 * *
 * *
 * * 定时任务相关
 * * {@link Async}
 * * {@link EnableAsync}
 * * {@link EnableScheduling}
 * * {@link Scheduled}
 * * {@link Schedules}
 * *
 * *
 * * 缓存相关
 * * {@link Cacheable}
 * * {@link CacheConfig}
 * * {@link CacheEvict}
 * * {@link Caching}
 * * {@link EnableCaching}
 * *
 * *
 * * 计量单位，搭配配置文件属性使用
 * * {@link DataSizeUnit}
 * * {@link Delimiter}
 * * {@link DurationFormat}
 * * {@link DurationUnit}
 * * {@link PeriodFormat}
 * * {@link PeriodUnit}
 * *
 * *
 * * 事物相关
 * * {@link Transactional}
 * * {@link EnableTransactionManagement}
 * *
 * *
 * * {@link org.springframework.format.annotation.DateTimeFormat}
 * * {@link org.springframework.format.annotation.NumberFormat}
 * * {@link org.springframework.core.annotation.AliasFor}
 * * {@link org.springframework.core.annotation.Order}
 * * {@link org.springframework.validation.annotation.Validated}
 * * {@link org.springframework.boot.context.properties.bind.Name}
 * * {@link org.springframework.boot.context.properties.bind.DefaultValue}
 * * {@link org.springframework.boot.jackson.JsonComponent}
 */
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
